#ifndef __COMMUNICATE_HPP
#define __COMMUNICATE_HPP
#include <HardwareSerial.h>
#include "CRC8_CRC16.hpp"
#include "remote_control.hpp"

typedef struct
{
    uint8_t sof;   // 数据帧起始字节，固定值为 0xA5
    uint8_t len;   // 数据段长度
    uint8_t id;    // 数据段id
    uint8_t type;  // 数据段类型
    uint8_t crc;   // 数据帧头的 CRC8
} __attribute__((packed)) FrameHeader_t;

typedef struct
{
    FrameHeader_t frame_header;

    uint32_t time_stamp;  //数据段时间戳

    struct
    {
        uint32_t index;
        float test_float;
        uint8_t reserved[42];
    } __attribute__((packed)) data;

    uint16_t crc16;  //crc16校验
} __attribute__((packed)) Data_Test_s;

extern RcType_t rc_type;

void setupUART(RcType_t type);

void sendData(void);

void resetRCData(void);

void updateRCData(int channel, int16_t value);

void communicateOff(void);

void communicateOn(void);

#endif // __COMMUNICATE_HPP
// END =====================================================
